package cn.actoncode.boot.framework.common.exception.enums;

import com.google.common.collect.Maps;
import lombok.Getter;

import java.util.Map;

/**
 * 快手小程序错误码
 *
 * @author bin
 */
@Getter
public enum KuaishouMaErrorMsgEnum {

    /**
     * access_token 过期
     */
    CODE_10000011(10000011, "access_token 过期"),

    /**
     * 订单不存在
     */
    CODE_10000601(10000601, "订单不存在"),

    /**
     * 订单信息不一致
     */
    CODE_10000602(10000602, "订单信息不一致"),

    /**
     * 订单过期
     */
    CODE_10000603(10000603, "订单过期"),

    /**
     * 订单状态不正确
     */
    CODE_10000604(10000604, "订单状态不正确"),

    /**
     * 回调地址异常
     */
    CODE_10000605(10000605, "回调地址异常"),

    /**
     * 接口参数签名错误
     */
    CODE_10000606(10000606, "接口参数签名错误"),

    /**
     * 不合理的订单金额
     */
    CODE_10000607(10000607, "不合理的订单金额"),

    /**
     * 非法的orderInfo
     */
    CODE_10000609(10000609, "非法的orderInfo"),

    /**
     * 重复下单
     */
    CODE_10000610(10000610, "重复下单"),

    /**
     * 查询订单信息失败
     */
    CODE_10000611(10000611, "查询订单信息失败"),

    /**
     * 费用信息错误
     */
    CODE_10000612(10000612, "费用信息错误"),

    /**
     * 支付中台验签失败
     */
    CODE_10000621(10000621, "支付中台验签失败"),

    /**
     * 校验订单金额失败
     */
    CODE_10000623(10000623, "校验订单金额失败"),

    /**
     * 支付订单回调失败
     */
    CODE_10000624(10000624, "支付订单回调失败"),

    /**
     * 退款调用异常
     */
    CODE_10000627(10000627, "退款调用异常"),

    /**
     * 支付中心异常
     */
    CODE_10000633(10000633, "支付中心异常"),

    /**
     * 订单未找到
     */
    CODE_10002018(10002018, "订单未找到"),

    /**
     * 用户关闭了此小程序的消息接收总开关，无法发送消息
     */
    CODE_10001024(10001024, "用户关闭了此小程序的消息接收总开关，无法发送消息"),

    /**
     * 用户关闭了此条消息的开关，无法发送消息
     */
    CODE_10001025(10001025, "用户关闭了此条消息的开关，无法发送消息"),

    /**
     * 用户未订阅此消息，或剩余可发送次数为 0
     */
    CODE_10001026(10001026, "用户未订阅此消息，或剩余可发送次数为 0"),

    /**
     * 一个小程序生命周期内重复调用了订阅消息接口
     */
    CODE_10001027(10001027, "一个小程序生命周期内重复调用了订阅消息接口"),

    /**
     * 参数有误，需要检查参数是否为空或有误
     */
    CODE_100200100(100200100, "参数有误，需要检查参数是否为空或有误"),

    /**
     * 参数有误，需要检查参数是否为空或有误
     */
    CODE_100200101(100200101, "验证出错，需要检查app_id和app_secret"),

    /**
     * 授权错误，请检查app_id和access_token是否正确
     */
    CODE_100200102(100200102, "授权错误，请检查app_id和access_token是否正确"),

    ;

    private final int code;
    private final String msg;

    KuaishouMaErrorMsgEnum(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    static final Map<Integer, String> valueMap = Maps.newHashMap();

    static {
        for (KuaishouMaErrorMsgEnum value : KuaishouMaErrorMsgEnum.values()) {
            valueMap.put(value.code, value.msg);
        }
    }

    /**
     * 通过错误代码查找其中文含义.
     */
    public static String findMsgByCode(int code) {
        return valueMap.getOrDefault(code, null);
    }
}
